
//------------------------------------------ add / delete answers --------------------------------


// Объекты
addAns = document.querySelector(".addAns");
dellAns = document.querySelectorAll(".dellAns");
answers = document.querySelector(".answers");
answer = document.querySelectorAll(".answer");

counter = 3;  //Счётчик

addAns.addEventListener("click", addAnswer); // Обработчик события (когда нажмётся кнопка добавления ответа)

// функция добавления ответа
function addAnswer(){
	answers.insertAdjacentHTML("beforeend",
	`<div class="answer">
		<span>${counter}</span>
		<input type="text" name="${counter}" class="answer-input" required>
		<input type="radio" name="corect" value="${counter}" required>
		<span class="dellAns" onclick="dellAnswer(this)">X</span>
	</div>`);
	counter ++;
}

// Функция удаления ответа
function dellAnswer(elem){
	if (answer.length > 1){
		elem.parentNode.parentNode.removeChild(elem.parentNode);
	}
}

// ------------------------------------------ sending receiving data ---------------------------------

sendBut = document.querySelector('button[type="submit"]'); //кнопка тправки

sendBut.addEventListener("click", sendData); //событие, нажатия на кнопку


// функция отправки данных на сервер
function sendData(e){

	e.preventDefault();  //запрет дефолтной отправки данных для формы
	ans = document.querySelectorAll('.answer-input'); //массив со всеми элементами ответов
	let ansData = new Map(); //асоциативный массив для хранения значений ответов

	// объявление переменных с ошибками
	var error1;
	var error2;
	var error3;

	// Функция чтения куки
	function readCookie(name) {
	  var matches = document.cookie.match(new RegExp(
	    "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
	  ));
	  return matches ? decodeURIComponent(matches[1]) : undefined;
	}

	// Проверка на заполненность поля с вопросом
	if(document.querySelector('input[name="question"]').value){
		var question = encodeURIComponent(document.querySelector('input[name="question"]').value);
		radios = document.querySelectorAll('input[type="radio"]'); //Массив со всеми радио-кнопками
		
		// Обход массива с ответами и включение их в отдельный массив
		for (var i = 0; i <= ans.length - 1; i++) {
			// Если значение есть, то оно записывается, если нет, то выдаётся ошибка
			if(ans[i].value){
				ansData.set(ans[i].name, encodeURIComponent(ans[i].value));
			}else{
				error1 = "Введите все ответы";
			}
		}

		// Обход всех радио кнопок запись в переменную значения выделенной кнопки
		for (let radio of radios) {
			// Если "чекнутых" не обнаружено, то вывести ошибку
			if (radio.checked) {
				var correctAns = radio.value;
				error2 = "" //это нужно для обнуления ошибки (если "чекнутая на первая")
				break;
			}
			error2 = " Выберите правильный ответ";
		}
	}else{
		error3 = " Введите вопрос"; //если поле с воросом пустое, выдаст ошибку
	}
	
	errDiv = document.querySelector('.error'); //Блок, в который будет помещено сообщение об ошибке

	// Если нет ни одной ошибки, то идёт отправка данных
	if(!error1 && !error2 && !error3){

		errDiv.innerHTML = " "; //Очистка блока с ошибкой, если она была

		//Формирование тела POST запроса из вопроса и номера корректного ответа.
		let postBody = `q=${question}&correct=${correctAns}`; 

		// Добавление к телу запроса номера ответа и его значение
		for(let pair of ansData.entries()){
			postBody += `&${pair[0]}=${pair[1]}`
		}

		// сам блок отправки данных
		fetch('addquestion.php', {  
			method: 'post',  // метод
			headers: {  
				"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"  // Заголовки
			},  
			body: postBody  //тело запроса
		})
		.then(promiseResult => {       //обработка ответов
			// var resl =  promiseResult.json();
      		// console.log(resl);
      		DBError = readCookie('errors');  //Чтение куки
      		//если куки есть, то вывести сообщение об ошибке
      		if(DBError){
      			alert('Произошла ошибка записи данных в базу, пожалуйста, проверьте правильность введённых данных и попробуйте ещё раз, или обратитесь к администратору. {'+DBError+'}')
      		}else{
      			alert('Успешно!');
      		}
   		}) 
		.catch(function (error) {      //Если возникли ошибки доступа к серверу, то вывести сообщение
			alert('Ошибка отправки данных на сервер, попробуйте позже или обратитесь за помощью. {'+ error +'}');  
		});
	}else{    //Если есть ошибки в заполнении формы, то вывести в блок с ошибками сообщение
		errDiv.innerHTML = error1 || error2 || error3; 
	}	
}